// 用defineStore方法来创建仓库
import { defineStore } from "pinia";

// 对于选项式的语法来说，可以使用as关键字或者interface的方法来定义ts的数据类型
interface CounterType {
  count: number;
  name: string;
  list: number[];
}

// useCounterStore表示的一个模块化的仓库
// 第一个参数是模块名称
// 第二个参数可以是对象(选项式的语法), 也可以是函数(组合式的语法)
export const useCounterStore = defineStore("counter", {
  state: (): CounterType => {
    return {
      // count: 3 as number,
      // name: "zhangsan" as string,
      // list: [1, 2, 3, 4, 5] as number[],
      count: 3,
      name: "zhangsan",
      list: [1, 2, 3, 4, 5],
    };
  },
  // 表示的也是仓库的计算属性
  getters: {
    doubleCount(state): number {
      return state.count * 2;
    },
  },
  // actions也是用来改变仓库数据的
  // actions里面是可以直接写异步的，快照是在数据改变的时候产生的
  actions: {
    increment(): void {
      setTimeout(() => {
        this.count++;
      }, 1000);
    },
  },
});
